package com.ejb;

import com.entidades.Cliente;
import com.entidades.Usuario;
import com.entidades.enumerandos.PerfilEnum;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Ricardo
 */
@Stateless
public class UsuarioBean implements UsuarioRemote, UsuarioLocal {

    @PersistenceContext
    private EntityManager em;

    public void gravar(Usuario u) {
        if (u.getId() != null) {
            em.merge(u);
        } else {
            em.persist(u);
        }

        em.flush();
    }

    public List<Usuario> findAll() {
        Query query = em.createQuery("Select u from Usuario u");
        return query.getResultList();
    }

    public void deletar(Usuario u) {
        //TODO levantar exceção para o usuário principal.
        u = em.merge(u);
        em.remove(u);
        em.flush();
    }

    public List<Usuario> findByCliente(Cliente cliente) {
        Query query = em.createQuery("Select u from Usuario u where u.cliente = :c").setParameter("c", cliente);

        return query.getResultList();


    }

    public Usuario findUsuarioPrincipalByCliente(Cliente cliente) {
        Query query = em.createQuery("Select u from Usuario u where u.cliente = :c").setParameter("c", cliente);

        return (Usuario) query.getSingleResult();
    }

    public Usuario findByLoginAndSenha(String login, String senha) {
        Query query = em.createQuery("Select u from Usuario u where u.email = :login" +
                " and u.senha = :senha").setParameter("login", login).setParameter("senha", senha);

        Usuario retorno = new Usuario();
        List<Usuario> listaUsuario = new ArrayList<Usuario>();
        listaUsuario = query.getResultList();
        if (listaUsuario != null && listaUsuario.size()>0) {
            retorno = listaUsuario.get(0);
        }
        return retorno;
    }
}
